const CartModel = require('../models/cartModel');
const ItemModel = require('../models/itemModel');

const addToCart = async (req, res) => {
  try {
    // 打印请求体，确保接收到的数据是正确的
    console.log('Request body:', req.body);

    // 确保从请求体中正确解析 itemId 和 quantity
    const { item_id: itemId, quantity } = req.body; // 注意字段名是否匹配
    const userId = req.user.id;

    // 打印 itemId 和 quantity，确保它们是正确的
    console.log('itemId:', itemId);
    console.log('quantity:', quantity);

    if (itemId === undefined || quantity === undefined) {
      return res.status(400).json({ error: 'Invalid request body' });
    }
    
    const item = await ItemModel.getItemById(itemId);
    if (!item) {
      return res.status(404).json({ error: 'Item not found' });
    }
    
    const subtotal = item.product_price * quantity;
    
    const cartItem = await CartModel.addToCart(userId, itemId, quantity, subtotal);
    res.status(201).json(cartItem[0]);
  } catch (error) {// 打印错误信息，帮助调试
    console.error('Error in addToCart:', error);
    res.status(500).json({ error: 'Internal Server Error' });
  }
};

const updateCart = async (req, res) => {
  try {
    const { cartId } = req.params; // 从路由参数获取
    const { itemId, quantity } = req.body; // 从请求体获取

    const existingCartItem = await CartModel.getCartItemById(cartId); // 使用正确的ID
    if (!existingCartItem) {
      return res.status(404).json({ error: 'Cart item not found' });
    }

    const item = await ItemModel.getItemById(itemId);
    if (!item) {
      return res.status(404).json({ error: 'Item not found' });
    }

    const subtotal = item.product_price * quantity;
    const updatedCartItem = await CartModel.updateCart(cartId, quantity, subtotal);

    // 调整返回值判断逻辑
    if (updatedCartItem) {
      res.status(200).json(updatedCartItem);
    } else {
      res.status(404).json({ error: 'Cart item not found' });
    }
  } catch (error) {
    console.error('Error in updateCart:', error);
    res.status(500).json({ error: 'Internal Server Error' });
  }
};

const removeFromCart = async (req, res) => {
  try {
    const { cartId } = req.params;
    const rowsDeleted = await CartModel.removeFromCart(cartId);

    if (rowsDeleted > 0) {
      res.status(200).json({ message: 'Item removed from cart' });
    } else {
      res.status(404).json({ error: 'Cart item not found' });
    }
  } catch (error) {
    console.error('Error in removeFromCart:', error);
    res.status(500).json({ error: 'Internal Server Error' });
  }
};

const getCartItems = async (req, res) => {
  try {
    const userId = req.user.id;
    const cartItems = await CartModel.getCartItems(userId);
    res.status(200).json(cartItems);
  } catch (error) {
    console.error(error);
    res.status(500).json({ error: 'Internal Server Error' });
  }
};

module.exports = { addToCart, updateCart, removeFromCart, getCartItems };